iT邦幫忙

2025 iThome 鐵人賽

DAY 14
0

當你用 MedusaJS 建立好電商後端(API + Admin UI + 核心邏輯),下一步就是把它打包成 production-ready 的版本,部署到真正的伺服器環境。這篇文章會帶你從打包、部署前置準備,到一些注意事項,讓你能順利上線。

下面流程可分為三階段:

  1. 打包(build)
  2. 啟動與測試
  3. 部署與上線注意點

一、打包(Build)

什麼是打包?

Medusa 提供了一個 CLI 指令 medusa build,其作用是將整個專案(包含後端程式與 Admin UI)編譯成可直接部署的版本,不再依賴原始的 TypeScript 檔案。

打包後產生一個目錄 .medusa(或依選項分割),裡面會包含:

  • .medusa/server:後端服務的 production build
  • .medusa/server/public/admin:Admin UI 的前端靜態資產

⚠️ 注意:這個 .medusa 目錄 不應該被提交到版本控制系統(如 Git)中。因為每次 build 都會重建。

打包指令與選項

在專案根目錄下執行:

npx medusa build

這會同時打包後端與 Admin UI。

如果你希望 只打包 Admin UI(例如前端部署在 Vercel 或類似服務),可以加上 --admin-only

npx medusa build --admin-only

這樣 Admin UI 的 build 檔案會輸出到 .medusa/admin 目錄(而不是一起在 .medusa/server/public/admindocs.medusajs.com


二、啟動與本地測試打包後的版本

打包完成後,要在本地(或預備環境)啟動確認沒問題,流程如下:

  1. 切換到 .medusa/server 目錄

  2. 安裝相依套件(因為 build 完後該目錄內可能需要 node_modules)

  3. 設定環境變數(從原本根目錄的 .env 複製或使用系統環境變數)

  4. 啟動應用(以 production 模式)

具體操作例子:

cd .medusa/server
npm install   # 或 yarn / pnpm
cp ../../.env .env.production   # 或相應複製方式
export NODE_ENV=production
npm start     # 或 yarn start / pnpm start

注意:在 production / staging 環境下,Medusa 對 cookie 的同源、安全性設定比較嚴格。若你在本地或開發環境用 production 模式登入 Admin,有可能無法用 cookie 認證。docs.medusajs.com

為了解決這個問題,可以在 medusa-config.ts 中臨時調整 projectConfig.cookieOptions,例如設定 sameSite: "lax"secure: false,來放寬 cookie 限制以便在本地測試。調整後要重新 build 並啟動。docs.medusajs.com

提醒:這樣的 cookie 設定 絕對不要 用在正式環境,否則會有安全風險。記得上線前要移除或恢復嚴格設定。docs.medusajs.com


三、部署與 Production 上線注意事項

部署方式常見選擇

Medusa 本身比較彈性,能部署在很多環境/平台上:

  • VPS / 虛擬主機(如 DigitalOcean、Linode、AWS EC2)
  • 容器化部署(Docker / Kubernetes)
  • 平臺即服務(PaaS、Serverless 支援等)

在部署前,需要考慮以下幾點:

  • 資料庫(PostgreSQL、MySQL 等)與快取(Redis)
  • 檔案儲存(上傳圖片、資源)
  • 網域、SSL/TLS
  • 環境變數與密鑰管理
  • 日誌、監控、錯誤追蹤
  • 安全性(如 HTTPS、CORS、cookie 設定等)

上線前檢查清單

項目 為什麼要檢查 建議操作
環境變數是否正確 錯誤的 API 金鑰、資料庫連線會導致錯誤 .env.production 或平台環境設定設定好
SSL / HTTPS 保護資料安全 強制 HTTP → HTTPS 重導向
Cookie / 同源設定 確保登入與認證正確 projectConfig.cookieOptions 中設定 sameSite, secure 等
日誌與錯誤追蹤 監控上線後系統狀態 整合 Sentry / 日誌工具 / 指標儀表板
資源存取權限 防止外部讀寫敏感檔案 僅開放必要目錄、設定正確權限
CORS / API 安全 防止惡意跨域請求 設定合理的 CORS 白名單、Header 驗證
資料庫遷移 / 版本一致性 保證資料庫 schema 與程式匹配 部署時先 migrate / run migrations
測試上線流程 確保上線沒有重大錯誤 在 staging 做完整流程測試(下單、付款、後台)

部署後維運注意

  • 若你打算不斷改寫後端與 UI,記得在每次改動後再 run medusa build 並重新部署整個 build 內容

  • 使用版本控制與 CI/CD 自動化打包流程,可減少人工錯誤

  • 對核心功能(下單、付款流程、API)寫測試(integration tests)保障功能正確性

  • 監控效能與資源(CPU、記憶體、資料庫查詢慢查詢等)


結語與建議

用 MedusaJS 打包與上線,表面看起來流程簡單(npx medusa build、部署、啟動),但實務上要把環境變數、cookie 安全、前後端搭配、資源管理、錯誤追蹤都顧好,才能讓系統真正穩定運行。

今天也是最後一天,這次也是我第一次參賽,雖然中間感冒睡死直接忘記上傳睡死一天。但是這次也是一個很寶貴的經驗,也讓我知道寫一篇好的文章也並不是提前幾天寫謝就好,寫到後面會發現時間根本不夠,想好的架構只好背離,如果明年還有機會參賽,一定會提前幾個月準備準備好..........


上一篇
Day29 其他插件
系列文
Medusa.js 石化我的心30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言